Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি ম্যানিপুলেশনের জন্য অনেক কার্যকরী ইউটিলিটি সরবরাহ করে, যার মধ্যে Wildcard এবং Regex ব্যবহার করে ফাইল ফিল্টার করা অন্যতম। এই ফিচারটি ফাইল সিস্টেমে নির্দিষ্ট প্যাটার্ন বা কন্ডিশন অনুসারে ফাইলগুলো চয়ন করতে সহায়তা করে। এটি বিশেষ করে বড় ডিরেক্টরি বা ফাইল সিস্টেমে কাজ করার সময়ে খুবই উপকারী।
Wildcard এবং Regex এর মাধ্যমে ফাইল ফিল্টার করা হলে, আপনি নির্দিষ্ট ফাইল এক্সটেনশন, নাম বা অন্যান্য প্যাটার্নের ভিত্তিতে ফাইলগুলো ফিল্টার করতে পারবেন।
1. Wildcard ব্যবহার করে ফাইল ফিল্টার করা
Wildcard সাধারণত ফাইল নামের অংশের সাথে ম্যাচ করার জন্য ব্যবহৃত হয়, যেখানে বিশেষ চিহ্ন যেমন * (যেকোনো সংখ্যক অক্ষর) এবং ? (একটি অক্ষর) ব্যবহার করা হয়।
WildcardFileFilter ক্লাস Apache Commons IO তে একটি ফাইল ফিল্টার ক্লাস, যা ওয়াইল্ডকার্ড প্যাটার্নের মাধ্যমে ফাইল ফিল্টার করতে সহায়তা করে।
WildcardFileFilter উদাহরণ:
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;
public class WildcardFileFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create a FileFilter using Wildcard to filter files with .txt extension
FileFilter fileFilter = new WildcardFileFilter("*.txt");
// Get all .txt files in the directory
File[] textFiles = directory.listFiles(fileFilter);
// Print the file names
for (File file : textFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
- WildcardFileFilter("*.txt") ব্যবহার করে আমরা সমস্ত
.txtএক্সটেনশনের ফাইলগুলো ফিল্টার করেছি। *চিহ্ন ব্যবহার করা হয়েছে যাতে সমস্ত.txtফাইল নির্বাচন করা যায়, যেগুলোর নাম যেকোনো হতে পারে।
Wildcard এর আরও উদাহরণ:
*.jpg: সকল JPEG ছবি ফাইল।file?.txt: যেসব ফাইলের নাম file1.txt, file2.txt ইত্যাদি হয়।report*: যে কোনো ফাইল যার নাম report দিয়ে শুরু হয়।
2. Regex ব্যবহার করে ফাইল ফিল্টার করা
Regex (Regular Expression) ব্যবহার করে আপনি আরও জটিল প্যাটার্নের মাধ্যমে ফাইল নাম ফিল্টার করতে পারেন। RegexFileFilter ক্লাস Apache Commons IO তে রয়েছে, যা আপনাকে regular expressions এর মাধ্যমে ফাইল ফিল্টার করার সুযোগ দেয়।
RegexFileFilter উদাহরণ:
import org.apache.commons.io.filefilter.RegexFileFilter;
import java.io.File;
import java.io.FileFilter;
public class RegexFileFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create a FileFilter using Regex to filter files that start with 'report' and end with .txt
FileFilter fileFilter = new RegexFileFilter("^report.*\\.txt$");
// Get all files matching the regex pattern
File[] reportFiles = directory.listFiles(fileFilter);
// Print the file names
for (File file : reportFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
- RegexFileFilter("^report.*\.txt$") ব্যবহার করা হয়েছে, যা report দিয়ে শুরু এবং .txt দিয়ে শেষ হওয়া ফাইলগুলোকে ফিল্টার করবে।
^এবং$হল regex এর বর্ডার চিহ্ন, যেগুলি ফাইল নামের শুরু এবং শেষের সাথে মিলে।
Regex প্যাটার্নের কিছু উদাহরণ:
^report.*\\.txt$: ফাইল নামের শুরুতে report এবং শেষের দিকে .txt থাকতে হবে।.*\\.jpg$: যেকোনো ফাইল যার এক্সটেনশন .jpg।^file[0-9]+\\.txt$: ফাইল নামের শুরুতে file এবং পরবর্তীতে এক বা একাধিক ডিজিট থাকতে হবে এবং ফাইলের এক্সটেনশন .txt হতে হবে।
3. Wildcard এবং Regex ব্যবহার করে একত্রিত ফিল্টার
আপনি Wildcard এবং Regex ফিল্টার একসাথে ব্যবহার করতে পারেন, যেমন ফাইলের নামের একটি অংশ ওয়াইল্ডকার্ড প্যাটার্ন দিয়ে এবং আরেকটি অংশ regex প্যাটার্ন দিয়ে ফিল্টার করা।
Wildcard এবং Regex একত্রিত ফিল্টার উদাহরণ:
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
import java.io.FileFilter;
public class CombinedFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create WildcardFileFilter to filter files with '.txt' extension
IOFileFilter wildcardFilter = new WildcardFileFilter("*.txt");
// Create RegexFileFilter to filter files starting with 'report' and ending with '.txt'
IOFileFilter regexFilter = new RegexFileFilter("^report.*\\.txt$");
// Combine both filters
IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);
// Get all files matching both filters
File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);
// Print the file names
for (File file : filteredFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
- WildcardFileFilter("*.txt") এবং RegexFileFilter("^report.*\.txt$") কে একত্রিত করে এক ফিল্টার তৈরি করা হয়েছে।
IOFileFilter.and()পদ্ধতি ব্যবহার করে উভয় ফিল্টার একসাথে প্রয়োগ করা হয়েছে।
4. ব্যবহারকারী কেস: একাধিক প্যাটার্নের মাধ্যমে ফাইল ফিল্টারিং
ধরা যাক, আপনি একটি ডিরেক্টরিতে থাকা .txt এবং .csv এক্সটেনশনের ফাইলগুলো ফিল্টার করতে চান, যেগুলোর নাম log দিয়ে শুরু এবং একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে।
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
public class MultiplePatternsExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create WildcardFileFilter to filter files with .txt and .csv extension
IOFileFilter wildcardFilter = new WildcardFileFilter("*.{txt,csv}");
// Create RegexFileFilter to filter files starting with 'log' and containing '2021'
IOFileFilter regexFilter = new RegexFileFilter("^log.*2021.*");
// Combine both filters
IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);
// Get all files matching both filters
File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);
// Print the filtered file names
for (File file : filteredFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
- WildcardFileFilter("*.{txt,csv}") এবং RegexFileFilter("^log.2021.") একত্রিত করে, .txt এবং .csv এক্সটেনশন সহ ফাইলগুলো ফিল্টার করা হয়েছে যেগুলোর নাম log দিয়ে শুরু হয় এবং 2021 অন্তর্ভুক্ত করে।
সারাংশ
Apache Commons IO লাইব্রেরি দিয়ে Wildcard এবং Regex ব্যবহার করে আপনি সহজে ফাইল সিস্টেমে ফিল্টারিং করতে পারেন। WildcardFileFilter এবং RegexFileFilter ক্লাসগুলির মাধ্যমে আপনি নির্দিষ্ট প্যাটার্ন বা এক্সটেনশনের ভিত্তিতে ফাইলগুলো নির্বাচন করতে পারেন। একাধিক ফিল্টারকে একত্রিত (combine) করে আরও কাস্টমাইজড ফিল্টারিংও করা সম্ভব। এই ফিচারটি বিশেষভাবে কার্যকরী যখন ডিরেক্টরি বা ফাইল সিস্টেমে বড় ডেটাসেট থাকে এবং নির্দিষ্ট প্যাটার্ন অনুযায়ী ফাইল নির্বাচন করতে হয়।
Read more